1. Field of the Invention
The present invention relates to the task of upgrading software within a distributed computing system. More specifically, the present invention provides a method and an apparatus that supports interactions between different versions of software for performing remote object invocations. This makes it possible to perform rolling upgrades of software across nodes of the distributed computing system while the distributed computing system continues to operate.
2. Related Art
Some distributed operating systems presently allow clients to interact with objects located on remote servers. This makes it possible for a single client to access numerous objects implemented on servers scattered throughout a distributed computer system. For example, the Common Object Request Broker Architecture (CORBA) allows clients to transparently make both local and remote object invocations.
CORBA provides a unique object reference for each object instance. A client can use this reference to direct an invocation to the associated object instance. Referring to FIG. 1, a client 102 invokes an operation on a stub 110, which acts as a proxy for an object instance 107. This invocation passes through stub 110 and then into Object Request Broker (ORB) 118. ORB 118 forwards the invocation to skeleton 112, which interacts with object instance 107 on server 106.
A remote object invocation works in almost the same way. Client 102 first obtains a reference to the remote object, for example by accessing a naming service. Client 102 then accesses the remote object in the same way that it accesses a local object. However, ORB 118 treats this remote object reference differently. When ORB 118 examines the reference and determines that the object is remote, ORB 118 routes the invocation to remote ORB 120, which is associated with remote object 109. Next, remote ORB 120 forwards the invocation into skeleton 116, which interacts with the remote object 109 on server 108.
Note that the CORBA standard defines an Interface Definition Language (IDL) framework that is supported by a corresponding IDL compiler. For each object type, a programmer typically defines an interface using the IDL. A client invoking an operation on the object uses a corresponding IDL interface to specify the operation it wants to perform and to marshal the arguments that it sends.
Although remote invocation mechanisms, such as CORBA, can greatly simplify the process of developing distributed applications, they can also complicate the process of updating software within distributed computing systems. Software within a distributed computing system is frequently updated to correct problems in the software or to add new features. However, it is not a simple matter to update software in a distributed computing system without halting the entire system for a significant period of time.
Note that it is possible to perform a “rolling upgrade” in a distributed computing system, wherein individual nodes in the distributed computing system are temporarily halted to load updated software without bringing the entire distributed computing system down. However, if some nodes are running the updated software and other nodes are not, there can be incompatibilities between different versions of the software that can cause the system to fail.
Hence, what is needed is a method and an apparatus that supports interactions between different versions of software for performing remote object invocations, thereby allowing a rolling upgrade of software to take place, without halting the entire distributed computing system and without generating incompatibilities between different versions of the software.